<?php namespace xlx;

//往工作进程池添加一个任务通道（限时）(init在进程池)
class DbWorker
{  
    //异步等待返回coid
    public static function start($fn, $args)
    {
        yield \xlx\AChannel::make($actor, $s);
        return yield $actor->spawn($fn); 
    }

    public function init($actor,$args){
        
    }
}


// class Worker{
//     public static function start($opt=[]){  
//         return \xlx\Supervisor::start_link([ static::class    ],$opt); 
//     }
//     public static function init($actor,$opt){ 
//         //fork workers 
//         echo "\r".json_encode($opt); 
//         yield \xlx\Process::delay(1);
//     }
//     // public function call($name,...$args){ 
//     //     $c = new \xlx\AChannel(); 
//     //     $c->send(static::class,[$name,$args]);
//     //     return $c->recive();//promise
//     // } 
// }
// class Worker 
// { 
//     // public function __construct($addr){
//     //     $this->addr = $addr;
//     // }
//     // public function __call($name,$args){

//     // }
//     // public static function call(){
//     //     //发送到service
//     // }    
//     public static function pipe($addr1,$addr2){
//         //发送命令到service：worker接收已经存在的worker终结消息
//         //阻塞？？找不到链接进程
//     }
//     public static function register($addr,$name){
//         //发送命令到service: 注册worker唯一名称
//         //阻塞？？已经被注册
//     }  
//     public static function start($opt=[]){ 
//         $opt['class'] = static::class;
//         if(empty($opt['name'])) $opt['name'] = static::class;
//         return Danboo::spawn(function($event,$addr)use($opt){     //阻塞？？返回注册名称     
//             yield Danboo::call('register',$opt['name'],$addr);//创建worker 并注册       
//             (new $opt['class'])->init($event,$addr,$opt);    
//             return $addr;
//         });   
//         //return new static($addr);
//     } 
//     public static function start_link($opt=[]){ 
//         $opt['class'] = static::class;
//         if(empty($opt['name'])) $opt['name'] = static::class; 
//         return Danboo::spawn(function($event,$addr)use($opt){  //阻塞？？返回注册名称   
//             yield Danboo::call('register',$opt['name'],$addr);//创建worker 并注册 
//             yield Danboo::call('link',$opt['name'],$addr); // 链接服务器  
//             (new $opt['class'])->init($event,$addr,$opt);     
//             return $addr;
//         });   
//         //return new static($addr);
//     }


//     public static function supervisor($opt){ 
//         //发送命令到service：创建一个supervise并链接一个Worker  
//         if(empty($opt['name']))$opt['name'] = static::class; 
//         return Danboo::call('supervisor',$opt); //阻塞？？返回注册名称
//     }

//     public static function pool($opt){
//         if(empty($opt['name']))$opt['name'] = static::class; 
//         return Danboo::call('pool',$opt); //阻塞？？返回注册名称 
//     }

//     // public static function worker(){

//     //     $server = \stream_socket_client(Danboo::$addr, $errno, $errstr);
//     //     $conn = new TcpConnection($socket,$addr);//注册当前进程 

//     //     return $addr;
//     // }

//     public function init($addr){
//         //注册后的addr 和 创建配置opt  
//     }     
// }
